Unsolved problems in software engineering
There is not a canonical list of unsolved problems in software engineering; however, there are the following issues: Engineering Challenges * Is it possible to simulate a human mind? * Is computer consciousness -- artificial consciousness -- possible? * Is it possible to solve any NP-complete problem quickly (in polynomial time)? * Will software complexity continue to match or exceed Moores Law? * Is it possible to have computers solve their own problems, in particular configuration problems or problems involving improper setup, integration or programming? ** Yes. A computer search for efficient ways to multiply two numbers using shifts , addition and subtraction can find the optimal machine code for multiplying by a given constant using these operations. Software for creating protocol converters can take a specification of two protocols, written in a standard form, and synthesise an efficient converter. Programs can benchmark themselves and select the variant of an algorithm that works most efficiently. There are also web-site engines which update the presentation of a website based on which presntations get the best click-throughs. * Is it possible to write software that users can themselves extend and interact with to solve the actual problem they want to solve, as opposed to the software that was written by the developer in a general way? ** Yes. It's called Open Source. Some of these problems are closely related to unsolved problems in neuroscience and unsolved problems in cognitive science. Software Engineering Project Management *List of antipatterns, which might be thought of as statements of poor practice, in contradistinction to the list of design patterns *Poorly predictable relationship of project duration to program functionality *Systematic detection of software defects *Statistical tendency of project to run behind schedule and over-budget ** Often caused by (good) managers who know that they need to make a demanding schedule or the team will guild the lily and not have focus on getting the product out to a schedule. *Adding additional manpower to a lagging software project (especially in later parts of the project) may actually cause further schedule slippage due to overhead experienced during the integration of new employees. See The Mythical Man-Month. Programming Complexity *Current complexity of most programming languages, in general *Current complexity of most applications, to the extent that companies fail when programmers leave, if those companies have no one else who understands what the programmers have done. Standards (software) *Non-standard implementation of standards or specifications by multiple organizations result in a requirement for implementation specific code and special case exceptions as a necessity for cross-platform interoperability. Notable modern examples include web browser compatibility and web-services interoperability. Companies create competing standards to solve their own problems and use their political clout to market the standard and themselves. Although competing standards sometimes improve upon existing problems, rarely do they replace or even provide an improvement upon current standards. That is to say that while a portion of the competing standard may outperform the other current standards in one area, a portion of the competing standard will suffer. *Differential implementations of standards by one specification. One explanation is that the early-adopters program according to an older, outdated version of the spec. Another possible explanation is that the companies' different implementations revealed after-the-fact that the specification had unclearly-defined or ambiguous rules. Eg: different blog software companies have implemented the metaweblog api based on the metaweblog api specification, although they did so differently since there was confusion about the methodNames of those methods shared with the blogger api (blogger.methodname vs metaweblog.methodname). *Arbitrariness of most software concepts, which is related to historical hardware and software implementation, lack of common standards worldwide, and economic pressures. original source Category:Forums